<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="counter">
    <button>sub</button>
    <input type="text" class="counter-1">
    <button>add</button>
  </div>
</body>
</html>

<script>
// 英文：
  // fix：修理 、 修复
  // private ：私有
  // public：共有
const { log } = console;

// 设计模式 -> 沙箱模式

// 闭包的作用：可以实现 私有变量
  // 什么是 私有变量：被外界不能访问的变量，即为 私有变量。
    // 私有变量(private)的好处：fix 掉 共有变量的坏处

// let count = 0; 
// 共有变量(public)的坏处：1）污染环境(容易重名)   2）任何开发者都能更改变量(不经意间)

// 案例：利用 闭包实现 count 的私有变量
  // 即：沙箱模式
function initCount(init = 0) {
  let count = init; // 此时的 count 变量，无法被外界直接获取；从而形成 私有变量
  // let x = ... N 个变量声明

  return {
    get() {
      return count;
    },
    set(val) {
      count = val;
    },
    // N 个函数，这N个函数都赋值到了 一个对象里
  }
}

const fCount = initCount(10); // 通过 闭包，oCount 的 set 和 get 函数，拿到了 外部函数的 count 变量




</script>
